package com.wwj.auction.admin.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.wwj.auction.admin.entity.GetOut;
import com.wwj.auction.admin.entity.vo.GetOutVo;
import com.wwj.auction.admin.entity.vo.PageModel;
import com.wwj.auction.admin.mapper.GetOutMapper;
import com.wwj.auction.admin.service.GetOutService;
import com.wwj.auction.common.util.SystemUtil;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;

import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author wwj
 * @since 2021-08-25
 */
@Service
public class GetOutServiceImpl extends ServiceImpl<GetOutMapper, GetOut> implements GetOutService {

    @Override
    public PageModel<GetOutVo> list(Integer storeId, Integer page, Integer limit, String keyword) {
        LambdaQueryWrapper<GetOut> wrapper = Wrappers.lambdaQuery(GetOut.class);
        // 判断是否存在查询条件
        if (!StringUtils.isEmpty(keyword)) {
            // 若存在，则拼接查询条件
            wrapper.like(GetOut::getShopName, keyword)
                    .or()
                    .like(GetOut::getMemo, keyword);
        }
        // 分页查询
        Page<GetOut> getOutPage = new Page<>(page, limit);
        List<GetOut> getOutList = baseMapper.selectPage(getOutPage, wrapper).getRecords();
        // 封装成Vo数据
        List<GetOutVo> getOutVoList = getOutList.stream().map(getOut -> {
            GetOutVo getOutVo = new GetOutVo();
            // 属性拷贝
            BeanUtils.copyProperties(getOut, getOutVo);
            // 处理日期时间
            LocalDateTime localDateTime = getOut.getCreateTime();
            String time = SystemUtil.parseDate(localDateTime);
            getOutVo.setCreateTime(time);
            return getOutVo;
        }).collect(Collectors.toList());
        // 封装最终响应结果
        PageModel<GetOutVo> pageModel = new PageModel<>();
        pageModel.setList(getOutVoList);
        pageModel.setTotal(getOutPage.getTotal());
        return pageModel;
    }
}
